/**
 * 如果异常，请 引入对应工具：
 * npm i jsencrypt -D
 * npm i encryptlong -S
 */
import JSEncrypt from 'jsencrypt' // 处理长文本数据时报错 jsencrypt.js Message too long for RSA
import Encrypt from 'encryptlong' // encryptlong是基于jsencrypt扩展的长文本分段加解密功能。
// 公钥私钥 由后端生成
// 公钥key
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKYAav5NQz+peuSObG5e6JTF7gtJAV/hbW28uz/GirbhIGzloHxZVP/VyA+Xsvvz48h2dVs6llgCO6j5g72g9KsCAwEAAQ=='
// 私钥key
const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApgBq/k1DP6l65I5sbl7olMXuC0kBX+Ftbby7P8aKtuEgbOWgfFlU/9XID5ey+/PjyHZ1WzqWWAI7qPmDvaD0qwIDAQABAkA1Ui8L7k9qlIrX/XOQ5EV6/DThRRr+7E8VD6lp6+FEqnjp29HMnPTto1GuKWnkmzilyWbpXoGbscoZ62Koj6UZAiEA22nFpyqOh7sTmohwaYZHyHJwNGYq4TaayndDqNfpkHcCIQDBrqJIVgb0lv/88GrdWUAzHE7YmEfLSQggjvqYBmOebQIhAJMeNehjkZQS7Q8V4wHuhp0xlmicBK5jtaCCHXzN4Q77AiBdIXTlJYCYsdcLsCsinlzxdqYvHiI/jLF8vmOfIEtcjQIgb7G/kfHjKD5SUe54FJOAxKRL/MLKLuaVwFNGSx1Ckts='

export default {
  /**
   * JSEncrypt加密
   * @param {*} data  需要加密的字符
   * @returns 加密后的字符
   */
  rsaPublicData(data) {
    var jsencrypt = new JSEncrypt()
    jsencrypt.setPublicKey(publicKey)
    // 如果是对象/数组的话，需要先JSON.stringify转换成字符串
    var result = jsencrypt.encrypt(data)
    return result
  },
  /**
   * JSEncrypt解密
   * @param {*} data  需要解密的字符
   * @returns 解密后的字符
   */
  rsaPrivateData(data) {
    var jsencrypt = new JSEncrypt()
    jsencrypt.setPrivateKey(privateKey)
    // 如果是对象/数组的话，需要先JSON.stringify转换成字符串
    var result = jsencrypt.encrypt(data)
    return result
  },
  /**
   * 加密
   * @param {*} data  需要加密的字符
   * @returns 加密后的字符
   */
  encrypt(data) {
    const PUBLIC_KEY = publicKey
    var encryptor = new Encrypt()
    encryptor.setPublicKey(PUBLIC_KEY)
    // 如果是对象/数组的话，需要先JSON.stringify转换成字符串
    const result = encryptor.encryptLong(data)
    return result
  },
  /**
   * 解密 - PRIVATE_KEY - 验证
   * @param {*} data  需要解密的字符
   * @returns 解密后的字符
   */
  decrypt(data) {
    const PRIVATE_KEY = privateKey
    var encryptor = new Encrypt()
    encryptor.setPrivateKey(PRIVATE_KEY)
    // 如果是对象/数组的话，需要先JSON.stringify转换成字符串
    var result = encryptor.decryptLong(data)
    return result
  }
}
